library Math { 
    
    /**
     * 
     * @dev Returnthe subtraction of two integers, reverting with message on overflow
     * 
     **/
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
      require(b <= a, "Subtraction overflow");
      return a - b;
    }
    
    /**
     * 
     * @dev Return the addition of two integers, reverting with message on overflow
     * 
     **/
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
      uint256 c = a + b;
      require(c >= a, "Addition overflow");
      return c;
    }
    
    /**
     * 
     * @dev Return the multiplication of two two integers, reverting with message on overflow
     * 
     **/
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "Multiplication overflow");
        return c;
    }
}
/**
 * 
 * @dev Operations with Overflow chechs.
 * 
 **/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
  require(b <= a, "Subtraction overflow");
  return a - b;
}

/**
 * 
 * @dev Returnthe subtraction of two integers, reverting with message on overflow
 * 
 **/