{
  "contractName": "SafeMathExtended",
  "abi": [],
  "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Unsigned math operations with safety checks that revert on error\",\"kind\":\"dev\",\"methods\":{},\"title\":\"SafeMathExtended\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/gabriel/Documents/iexec/poco-boost/iexec-solidity/contracts/Libs/SafeMathExtended.sol\":\"SafeMathExtended\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/gabriel/Documents/iexec/poco-boost/iexec-solidity/contracts/Libs/SafeMathExtended.sol\":{\"keccak256\":\"0x6519b20a82c325463cc6800596af78b130ae9cc38735dbb2ef44afac28987d40\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://82d15f4fc2349bf503ee115dad30e2a5cec9ee843f4ca8488a6ad306ed8b8013\",\"dweb:/ipfs/QmUpX3LHReSoQcRdSFEzrk5Ba14AeEMLVMWGSE9D4cBnqs\"]}},\"version\":1}",
  "bytecode": "0x60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220dee48dc4e7d6bcd95f8a5130c90e9e6ba5a68fce41a2f1249e3fd0c0bb4e187064736f6c634300060c0033",
  "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220dee48dc4e7d6bcd95f8a5130c90e9e6ba5a68fce41a2f1249e3fd0c0bb4e187064736f6c634300060c0033",
  "immutableReferences": {},
  "sourceMap": "1375:3895:22:-:0;;;;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "1375:3895:22:-:0;;;;;;;;",
  "source": "// SPDX-License-Identifier: Apache-2.0\n\n/******************************************************************************\n * Copyright 2020 IEXEC BLOCKCHAIN TECH                                       *\n *                                                                            *\n * Licensed under the Apache License, Version 2.0 (the \"License\");            *\n * you may not use this file except in compliance with the License.           *\n * You may obtain a copy of the License at                                    *\n *                                                                            *\n *     http://www.apache.org/licenses/LICENSE-2.0                             *\n *                                                                            *\n * Unless required by applicable law or agreed to in writing, software        *\n * distributed under the License is distributed on an \"AS IS\" BASIS,          *\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   *\n * See the License for the specific language governing permissions and        *\n * limitations under the License.                                             *\n ******************************************************************************/\n\npragma solidity ^0.6.0;\n\n/**\n * @title SafeMathExtended\n * @dev Unsigned math operations with safety checks that revert on error\n */\nlibrary SafeMathExtended\n{\n\t/**\n\t* @dev Adds two unsigned integers, reverts on overflow.\n\t*/\n\tfunction add(uint256 a, uint256 b) internal pure returns (uint256)\n\t{\n\t\tuint256 c = a + b;\n\t\trequire(c >= a);\n\t\treturn c;\n\t}\n\n\t/**\n\t* @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).\n\t*/\n\tfunction sub(uint256 a, uint256 b) internal pure returns (uint256)\n\t{\n\t\trequire(b <= a);\n\t\tuint256 c = a - b;\n\t\treturn c;\n\t}\n\n\t/**\n\t* @dev Multiplies two unsigned integers, reverts on overflow.\n\t*/\n\tfunction mul(uint256 a, uint256 b) internal pure returns (uint256)\n\t{\n\t\t// Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n\t\t// benefit is lost if 'b' is also tested.\n\t\t// See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522\n\t\tif (a == 0)\n\t\t{\n\t\t\treturn 0;\n\t\t}\n\t\tuint256 c = a * b;\n\t\trequire(c / a == b);\n\t\treturn c;\n\t}\n\n\t/**\n\t* @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.\n\t*/\n\tfunction div(uint256 a, uint256 b) internal pure returns (uint256)\n\t{\n\t\t\t// Solidity only automatically asserts when dividing by 0\n\t\t\trequire(b > 0);\n\t\t\tuint256 c = a / b;\n\t\t\t// assert(a == b * c + a % b); // There is no case in which this doesn't hold\n\t\t\treturn c;\n\t}\n\n\t/**\n\t* @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),\n\t* reverts when dividing by zero.\n\t*/\n\tfunction mod(uint256 a, uint256 b) internal pure returns (uint256)\n\t{\n\t\trequire(b != 0);\n\t\treturn a % b;\n\t}\n\n\t/**\n\t* @dev Returns the largest of two numbers.\n\t*/\n\tfunction max(uint256 a, uint256 b) internal pure returns (uint256)\n\t{\n\t\treturn a >= b ? a : b;\n\t}\n\n\t/**\n\t* @dev Returns the smallest of two numbers.\n\t*/\n\tfunction min(uint256 a, uint256 b) internal pure returns (uint256)\n\t{\n\t\treturn a < b ? a : b;\n\t}\n\n\t/**\n\t* @dev Multiplies the a by the fraction b/c\n\t*/\n\tfunction mulByFraction(uint256 a, uint256 b, uint256 c) internal pure returns (uint256)\n\t{\n\t\treturn div(mul(a, b), c);\n\t}\n\n\t/**\n\t* @dev Return b percents of a (equivalent to a percents of b)\n\t*/\n\tfunction percentage(uint256 a, uint256 b) internal pure returns (uint256)\n\t{\n\t\treturn mulByFraction(a, b, 100);\n\t}\n\n\t/**\n\t* @dev Returns the base 2 log of x\n\t* @notice Source : https://ethereum.stackexchange.com/questions/8086/logarithm-math-operation-in-solidity\n\t*/\n\tfunction log(uint x) internal pure returns (uint y)\n\t{\n\t\tassembly\n\t\t{\n\t\t\tlet arg := x\n\t\t\tx := sub(x,1)\n\t\t\tx := or(x, div(x, 0x02))\n\t\t\tx := or(x, div(x, 0x04))\n\t\t\tx := or(x, div(x, 0x10))\n\t\t\tx := or(x, div(x, 0x100))\n\t\t\tx := or(x, div(x, 0x10000))\n\t\t\tx := or(x, div(x, 0x100000000))\n\t\t\tx := or(x, div(x, 0x10000000000000000))\n\t\t\tx := or(x, div(x, 0x100000000000000000000000000000000))\n\t\t\tx := add(x, 1)\n\t\t\tlet m := mload(0x40)\n\t\t\tmstore(m,           0xf8f9cbfae6cc78fbefe7cdc3a1793dfcf4f0e8bbd8cec470b6a28a7a5a3e1efd)\n\t\t\tmstore(add(m,0x20), 0xf5ecf1b3e9debc68e1d9cfabc5997135bfb7a7a3938b7b606b5b4b3f2f1f0ffe)\n\t\t\tmstore(add(m,0x40), 0xf6e4ed9ff2d6b458eadcdf97bd91692de2d4da8fd2d0ac50c6ae9a8272523616)\n\t\t\tmstore(add(m,0x60), 0xc8c0b887b0a8a4489c948c7f847c6125746c645c544c444038302820181008ff)\n\t\t\tmstore(add(m,0x80), 0xf7cae577eec2a03cf3bad76fb589591debb2dd67e0aa9834bea6925f6a4a2e0e)\n\t\t\tmstore(add(m,0xa0), 0xe39ed557db96902cd38ed14fad815115c786af479b7e83247363534337271707)\n\t\t\tmstore(add(m,0xc0), 0xc976c13bb96e881cb166a933a55e490d9d56952b8d4e801485467d2362422606)\n\t\t\tmstore(add(m,0xe0), 0x753a6d1b65325d0c552a4d1345224105391a310b29122104190a110309020100)\n\t\t\tmstore(0x40, add(m, 0x100))\n\t\t\tlet magic := 0x818283848586878898a8b8c8d8e8f929395969799a9b9d9e9faaeb6bedeeff\n\t\t\tlet shift := 0x100000000000000000000000000000000000000000000000000000000000000\n\t\t\tlet a := div(mul(x, magic), shift)\n\t\t\ty := div(mload(add(m,sub(255,a))), shift)\n\t\t\ty := add(y, mul(256, gt(arg, 0x8000000000000000000000000000000000000000000000000000000000000000)))\n\t\t}\n\t}\n}\n",
  "sourcePath": "/Users/gabriel/Documents/iexec/poco-boost/iexec-solidity/contracts/Libs/SafeMathExtended.sol",
  "ast": {
    "absolutePath": "/Users/gabriel/Documents/iexec/poco-boost/iexec-solidity/contracts/Libs/SafeMathExtended.sol",
    "exportedSymbols": {
      "SafeMathExtended": [
        2164
      ]
    },
    "id": 2165,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1948,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "1242:23:22"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": {
          "id": 1949,
          "nodeType": "StructuredDocumentation",
          "src": "1267:107:22",
          "text": " @title SafeMathExtended\n @dev Unsigned math operations with safety checks that revert on error"
        },
        "fullyImplemented": true,
        "id": 2164,
        "linearizedBaseContracts": [
          2164
        ],
        "name": "SafeMathExtended",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 1973,
              "nodeType": "Block",
              "src": "1537:56:22",
              "statements": [
                {
                  "assignments": [
                    1960
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1960,
                      "mutability": "mutable",
                      "name": "c",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1973,
                      "src": "1541:9:22",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1959,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1541:7:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1964,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1963,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1961,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1952,
                      "src": "1553:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1962,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1954,
                      "src": "1557:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1553:5:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1541:17:22"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1968,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1966,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1960,
                          "src": "1570:1:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1967,
                          "name": "a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1952,
                          "src": "1575:1:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1570:6:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1965,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1562:7:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1969,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1562:15:22",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1970,
                  "nodeType": "ExpressionStatement",
                  "src": "1562:15:22"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1971,
                    "name": "c",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1960,
                    "src": "1588:1:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1958,
                  "id": 1972,
                  "nodeType": "Return",
                  "src": "1581:8:22"
                }
              ]
            },
            "documentation": {
              "id": 1950,
              "nodeType": "StructuredDocumentation",
              "src": "1403:64:22",
              "text": " @dev Adds two unsigned integers, reverts on overflow."
            },
            "id": 1974,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "add",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1955,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1952,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1974,
                  "src": "1482:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1951,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1482:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1954,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1974,
                  "src": "1493:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1953,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1493:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1481:22:22"
            },
            "returnParameters": {
              "id": 1958,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1957,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1974,
                  "src": "1527:7:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1956,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1527:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1526:9:22"
            },
            "scope": 2164,
            "src": "1469:124:22",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1998,
              "nodeType": "Block",
              "src": "1780:56:22",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1987,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1985,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1979,
                          "src": "1792:1:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1986,
                          "name": "a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1977,
                          "src": "1797:1:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1792:6:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1984,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1784:7:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1988,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1784:15:22",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1989,
                  "nodeType": "ExpressionStatement",
                  "src": "1784:15:22"
                },
                {
                  "assignments": [
                    1991
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1991,
                      "mutability": "mutable",
                      "name": "c",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1998,
                      "src": "1803:9:22",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1990,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1803:7:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1995,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1994,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1992,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1977,
                      "src": "1815:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1993,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1979,
                      "src": "1819:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1815:5:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1803:17:22"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1996,
                    "name": "c",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1991,
                    "src": "1831:1:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1983,
                  "id": 1997,
                  "nodeType": "Return",
                  "src": "1824:8:22"
                }
              ]
            },
            "documentation": {
              "id": 1975,
              "nodeType": "StructuredDocumentation",
              "src": "1596:114:22",
              "text": " @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend)."
            },
            "id": 1999,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sub",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1980,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1977,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1999,
                  "src": "1725:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1976,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1725:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1979,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1999,
                  "src": "1736:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1978,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1736:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1724:22:22"
            },
            "returnParameters": {
              "id": 1983,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1982,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1999,
                  "src": "1770:7:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1981,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1770:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1769:9:22"
            },
            "scope": 2164,
            "src": "1712:124:22",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2032,
              "nodeType": "Block",
              "src": "1979:294:22",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2011,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2009,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2002,
                      "src": "2186:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2010,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2191:1:22",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "2186:6:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2015,
                  "nodeType": "IfStatement",
                  "src": "2182:32:22",
                  "trueBody": {
                    "id": 2014,
                    "nodeType": "Block",
                    "src": "2196:18:22",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2012,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2208:1:22",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 2008,
                        "id": 2013,
                        "nodeType": "Return",
                        "src": "2201:8:22"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2017
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2017,
                      "mutability": "mutable",
                      "name": "c",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2032,
                      "src": "2217:9:22",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2016,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2217:7:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2021,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2020,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2018,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2002,
                      "src": "2229:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2019,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2004,
                      "src": "2233:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2229:5:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2217:17:22"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2027,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2025,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2023,
                            "name": "c",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2017,
                            "src": "2246:1:22",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2024,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2002,
                            "src": "2250:1:22",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2246:5:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2026,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2004,
                          "src": "2255:1:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2246:10:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2022,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2238:7:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2028,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2238:19:22",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2029,
                  "nodeType": "ExpressionStatement",
                  "src": "2238:19:22"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2030,
                    "name": "c",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2017,
                    "src": "2268:1:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2008,
                  "id": 2031,
                  "nodeType": "Return",
                  "src": "2261:8:22"
                }
              ]
            },
            "documentation": {
              "id": 2000,
              "nodeType": "StructuredDocumentation",
              "src": "1839:70:22",
              "text": " @dev Multiplies two unsigned integers, reverts on overflow."
            },
            "id": 2033,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mul",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2005,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2002,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2033,
                  "src": "1924:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2001,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1924:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2004,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2033,
                  "src": "1935:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2003,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1935:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1923:22:22"
            },
            "returnParameters": {
              "id": 2008,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2007,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2033,
                  "src": "1969:7:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2006,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1969:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1968:9:22"
            },
            "scope": 2164,
            "src": "1911:362:22",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2057,
              "nodeType": "Block",
              "src": "2457:200:22",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2046,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2044,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2038,
                          "src": "2531:1:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2045,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2535:1:22",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "2531:5:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2043,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2523:7:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2047,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2523:14:22",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2048,
                  "nodeType": "ExpressionStatement",
                  "src": "2523:14:22"
                },
                {
                  "assignments": [
                    2050
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2050,
                      "mutability": "mutable",
                      "name": "c",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2057,
                      "src": "2542:9:22",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2049,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2542:7:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2054,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2053,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2051,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2036,
                      "src": "2554:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2052,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2038,
                      "src": "2558:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2554:5:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2542:17:22"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2055,
                    "name": "c",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2050,
                    "src": "2652:1:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2042,
                  "id": 2056,
                  "nodeType": "Return",
                  "src": "2645:8:22"
                }
              ]
            },
            "documentation": {
              "id": 2034,
              "nodeType": "StructuredDocumentation",
              "src": "2276:111:22",
              "text": " @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero."
            },
            "id": 2058,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "div",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2039,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2036,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2058,
                  "src": "2402:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2035,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2402:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2038,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2058,
                  "src": "2413:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2037,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2413:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2401:22:22"
            },
            "returnParameters": {
              "id": 2042,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2041,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2058,
                  "src": "2447:7:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2040,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2447:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2446:9:22"
            },
            "scope": 2164,
            "src": "2389:268:22",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2078,
              "nodeType": "Block",
              "src": "2862:39:22",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2071,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2069,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2063,
                          "src": "2874:1:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2070,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2879:1:22",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "2874:6:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2068,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2866:7:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2072,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2866:15:22",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2073,
                  "nodeType": "ExpressionStatement",
                  "src": "2866:15:22"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2076,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2074,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2061,
                      "src": "2892:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "%",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2075,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2063,
                      "src": "2896:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2892:5:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2067,
                  "id": 2077,
                  "nodeType": "Return",
                  "src": "2885:12:22"
                }
              ]
            },
            "documentation": {
              "id": 2059,
              "nodeType": "StructuredDocumentation",
              "src": "2660:132:22",
              "text": " @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),\n reverts when dividing by zero."
            },
            "id": 2079,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mod",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2064,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2061,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2079,
                  "src": "2807:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2060,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2807:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2063,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2079,
                  "src": "2818:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2062,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2818:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2806:22:22"
            },
            "returnParameters": {
              "id": 2067,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2066,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2079,
                  "src": "2852:7:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2065,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2852:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2851:9:22"
            },
            "scope": 2164,
            "src": "2794:107:22",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2096,
              "nodeType": "Block",
              "src": "3025:29:22",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2091,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2089,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2082,
                        "src": "3036:1:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2090,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2084,
                        "src": "3041:1:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "3036:6:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 2093,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2084,
                      "src": "3049:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2094,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "3036:14:22",
                    "trueExpression": {
                      "argumentTypes": null,
                      "id": 2092,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2082,
                      "src": "3045:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2088,
                  "id": 2095,
                  "nodeType": "Return",
                  "src": "3029:21:22"
                }
              ]
            },
            "documentation": {
              "id": 2080,
              "nodeType": "StructuredDocumentation",
              "src": "2904:51:22",
              "text": " @dev Returns the largest of two numbers."
            },
            "id": 2097,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "max",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2085,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2082,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2097,
                  "src": "2970:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2081,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2970:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2084,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2097,
                  "src": "2981:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2083,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2981:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2969:22:22"
            },
            "returnParameters": {
              "id": 2088,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2087,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2097,
                  "src": "3015:7:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2086,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3015:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3014:9:22"
            },
            "scope": 2164,
            "src": "2957:97:22",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2114,
              "nodeType": "Block",
              "src": "3179:28:22",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2109,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2107,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2100,
                        "src": "3190:1:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2108,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2102,
                        "src": "3194:1:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "3190:5:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 2111,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2102,
                      "src": "3202:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2112,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "3190:13:22",
                    "trueExpression": {
                      "argumentTypes": null,
                      "id": 2110,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2100,
                      "src": "3198:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2106,
                  "id": 2113,
                  "nodeType": "Return",
                  "src": "3183:20:22"
                }
              ]
            },
            "documentation": {
              "id": 2098,
              "nodeType": "StructuredDocumentation",
              "src": "3057:52:22",
              "text": " @dev Returns the smallest of two numbers."
            },
            "id": 2115,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "min",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2103,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2100,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2115,
                  "src": "3124:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2099,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3124:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2102,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2115,
                  "src": "3135:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2101,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3135:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3123:22:22"
            },
            "returnParameters": {
              "id": 2106,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2105,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2115,
                  "src": "3169:7:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2104,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3169:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3168:9:22"
            },
            "scope": 2164,
            "src": "3111:96:22",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2135,
              "nodeType": "Block",
              "src": "3353:32:22",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2129,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2118,
                            "src": "3372:1:22",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 2130,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2120,
                            "src": "3375:1:22",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 2128,
                          "name": "mul",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2033,
                          "src": "3368:3:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 2131,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3368:9:22",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2132,
                        "name": "c",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2122,
                        "src": "3379:1:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2127,
                      "name": "div",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2058,
                      "src": "3364:3:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2133,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3364:17:22",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2126,
                  "id": 2134,
                  "nodeType": "Return",
                  "src": "3357:24:22"
                }
              ]
            },
            "documentation": {
              "id": 2116,
              "nodeType": "StructuredDocumentation",
              "src": "3210:52:22",
              "text": " @dev Multiplies the a by the fraction b/c"
            },
            "id": 2136,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mulByFraction",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2123,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2118,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2136,
                  "src": "3287:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2117,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3287:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2120,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2136,
                  "src": "3298:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2119,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3298:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2122,
                  "mutability": "mutable",
                  "name": "c",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2136,
                  "src": "3309:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2121,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3309:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3286:33:22"
            },
            "returnParameters": {
              "id": 2126,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2125,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2136,
                  "src": "3343:7:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2124,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3343:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3342:9:22"
            },
            "scope": 2164,
            "src": "3264:121:22",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2152,
              "nodeType": "Block",
              "src": "3535:39:22",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2147,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2139,
                        "src": "3560:1:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2148,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2141,
                        "src": "3563:1:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "313030",
                        "id": 2149,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3566:3:22",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_100_by_1",
                          "typeString": "int_const 100"
                        },
                        "value": "100"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_100_by_1",
                          "typeString": "int_const 100"
                        }
                      ],
                      "id": 2146,
                      "name": "mulByFraction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2136,
                      "src": "3546:13:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2150,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3546:24:22",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2145,
                  "id": 2151,
                  "nodeType": "Return",
                  "src": "3539:31:22"
                }
              ]
            },
            "documentation": {
              "id": 2137,
              "nodeType": "StructuredDocumentation",
              "src": "3388:70:22",
              "text": " @dev Return b percents of a (equivalent to a percents of b)"
            },
            "id": 2153,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "percentage",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2142,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2139,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2153,
                  "src": "3480:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2138,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3480:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2141,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2153,
                  "src": "3491:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2140,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3491:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3479:22:22"
            },
            "returnParameters": {
              "id": 2145,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2144,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2153,
                  "src": "3525:7:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2143,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3525:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3524:9:22"
            },
            "scope": 2164,
            "src": "3460:114:22",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2162,
              "nodeType": "Block",
              "src": "3782:1486:22",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "3797:1468:22",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "3802:12:22",
                        "value": {
                          "name": "x",
                          "nodeType": "YulIdentifier",
                          "src": "3813:1:22"
                        },
                        "variables": [
                          {
                            "name": "arg",
                            "nodeType": "YulTypedName",
                            "src": "3806:3:22",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "3818:13:22",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "3827:1:22"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3829:1:22",
                              "type": "",
                              "value": "1"
                            }
                          ],
                          "functionName": {
                            "name": "sub",
                            "nodeType": "YulIdentifier",
                            "src": "3823:3:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3823:8:22"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "3818:1:22"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "3835:24:22",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "3843:1:22"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "3850:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3853:4:22",
                                  "type": "",
                                  "value": "0x02"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "3846:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3846:12:22"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "3840:2:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3840:19:22"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "3835:1:22"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "3863:24:22",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "3871:1:22"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "3878:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3881:4:22",
                                  "type": "",
                                  "value": "0x04"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "3874:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3874:12:22"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "3868:2:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3868:19:22"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "3863:1:22"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "3891:24:22",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "3899:1:22"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "3906:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3909:4:22",
                                  "type": "",
                                  "value": "0x10"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "3902:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3902:12:22"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "3896:2:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3896:19:22"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "3891:1:22"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "3919:25:22",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "3927:1:22"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "3934:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3937:5:22",
                                  "type": "",
                                  "value": "0x100"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "3930:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3930:13:22"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "3924:2:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3924:20:22"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "3919:1:22"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "3948:27:22",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "3956:1:22"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "3963:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3966:7:22",
                                  "type": "",
                                  "value": "0x10000"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "3959:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3959:15:22"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "3953:2:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3953:22:22"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "3948:1:22"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "3979:31:22",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "3987:1:22"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "3994:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3997:11:22",
                                  "type": "",
                                  "value": "0x100000000"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "3990:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3990:19:22"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "3984:2:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3984:26:22"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "3979:1:22"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "4014:39:22",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "4022:1:22"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "4029:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4032:19:22",
                                  "type": "",
                                  "value": "0x10000000000000000"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "4025:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4025:27:22"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "4019:2:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4019:34:22"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "4014:1:22"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "4057:55:22",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "4065:1:22"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "4072:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4075:35:22",
                                  "type": "",
                                  "value": "0x100000000000000000000000000000000"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "4068:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4068:43:22"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "4062:2:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4062:50:22"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "4057:1:22"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "4116:14:22",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "4125:1:22"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4128:1:22",
                              "type": "",
                              "value": "1"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "4121:3:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4121:9:22"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "4116:1:22"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "4134:20:22",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4149:4:22",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "4143:5:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4143:11:22"
                        },
                        "variables": [
                          {
                            "name": "m",
                            "nodeType": "YulTypedName",
                            "src": "4138:1:22",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "m",
                              "nodeType": "YulIdentifier",
                              "src": "4165:1:22"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4178:66:22",
                              "type": "",
                              "value": "0xf8f9cbfae6cc78fbefe7cdc3a1793dfcf4f0e8bbd8cec470b6a28a7a5a3e1efd"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4158:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4158:87:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4158:87:22"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "4260:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4262:4:22",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "4256:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4256:11:22"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4269:66:22",
                              "type": "",
                              "value": "0xf5ecf1b3e9debc68e1d9cfabc5997135bfb7a7a3938b7b606b5b4b3f2f1f0ffe"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4249:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4249:87:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4249:87:22"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "4351:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4353:4:22",
                                  "type": "",
                                  "value": "0x40"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "4347:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4347:11:22"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4360:66:22",
                              "type": "",
                              "value": "0xf6e4ed9ff2d6b458eadcdf97bd91692de2d4da8fd2d0ac50c6ae9a8272523616"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4340:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4340:87:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4340:87:22"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "4442:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4444:4:22",
                                  "type": "",
                                  "value": "0x60"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "4438:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4438:11:22"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4451:66:22",
                              "type": "",
                              "value": "0xc8c0b887b0a8a4489c948c7f847c6125746c645c544c444038302820181008ff"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4431:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4431:87:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4431:87:22"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "4533:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4535:4:22",
                                  "type": "",
                                  "value": "0x80"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "4529:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4529:11:22"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4542:66:22",
                              "type": "",
                              "value": "0xf7cae577eec2a03cf3bad76fb589591debb2dd67e0aa9834bea6925f6a4a2e0e"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4522:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4522:87:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4522:87:22"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "4624:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4626:4:22",
                                  "type": "",
                                  "value": "0xa0"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "4620:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4620:11:22"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4633:66:22",
                              "type": "",
                              "value": "0xe39ed557db96902cd38ed14fad815115c786af479b7e83247363534337271707"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4613:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4613:87:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4613:87:22"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "4715:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4717:4:22",
                                  "type": "",
                                  "value": "0xc0"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "4711:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4711:11:22"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4724:66:22",
                              "type": "",
                              "value": "0xc976c13bb96e881cb166a933a55e490d9d56952b8d4e801485467d2362422606"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4704:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4704:87:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4704:87:22"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "4806:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4808:4:22",
                                  "type": "",
                                  "value": "0xe0"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "4802:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4802:11:22"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4815:66:22",
                              "type": "",
                              "value": "0x753a6d1b65325d0c552a4d1345224105391a310b29122104190a110309020100"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4795:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4795:87:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4795:87:22"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4893:4:22",
                              "type": "",
                              "value": "0x40"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "4903:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4906:5:22",
                                  "type": "",
                                  "value": "0x100"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "4899:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4899:13:22"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4886:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4886:27:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4886:27:22"
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "4917:77:22",
                        "value": {
                          "kind": "number",
                          "nodeType": "YulLiteral",
                          "src": "4930:64:22",
                          "type": "",
                          "value": "0x818283848586878898a8b8c8d8e8f929395969799a9b9d9e9faaeb6bedeeff"
                        },
                        "variables": [
                          {
                            "name": "magic",
                            "nodeType": "YulTypedName",
                            "src": "4921:5:22",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "4998:78:22",
                        "value": {
                          "kind": "number",
                          "nodeType": "YulLiteral",
                          "src": "5011:65:22",
                          "type": "",
                          "value": "0x100000000000000000000000000000000000000000000000000000000000000"
                        },
                        "variables": [
                          {
                            "name": "shift",
                            "nodeType": "YulTypedName",
                            "src": "5002:5:22",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "5080:34:22",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "5097:1:22"
                                },
                                {
                                  "name": "magic",
                                  "nodeType": "YulIdentifier",
                                  "src": "5100:5:22"
                                }
                              ],
                              "functionName": {
                                "name": "mul",
                                "nodeType": "YulIdentifier",
                                "src": "5093:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "5093:13:22"
                            },
                            {
                              "name": "shift",
                              "nodeType": "YulIdentifier",
                              "src": "5108:5:22"
                            }
                          ],
                          "functionName": {
                            "name": "div",
                            "nodeType": "YulIdentifier",
                            "src": "5089:3:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5089:25:22"
                        },
                        "variables": [
                          {
                            "name": "a",
                            "nodeType": "YulTypedName",
                            "src": "5084:1:22",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "5118:41:22",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "m",
                                      "nodeType": "YulIdentifier",
                                      "src": "5137:1:22"
                                    },
                                    {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5143:3:22",
                                          "type": "",
                                          "value": "255"
                                        },
                                        {
                                          "name": "a",
                                          "nodeType": "YulIdentifier",
                                          "src": "5147:1:22"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "sub",
                                        "nodeType": "YulIdentifier",
                                        "src": "5139:3:22"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5139:10:22"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "5133:3:22"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "5133:17:22"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "5127:5:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "5127:24:22"
                            },
                            {
                              "name": "shift",
                              "nodeType": "YulIdentifier",
                              "src": "5153:5:22"
                            }
                          ],
                          "functionName": {
                            "name": "div",
                            "nodeType": "YulIdentifier",
                            "src": "5123:3:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5123:36:22"
                        },
                        "variableNames": [
                          {
                            "name": "y",
                            "nodeType": "YulIdentifier",
                            "src": "5118:1:22"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "5163:98:22",
                        "value": {
                          "arguments": [
                            {
                              "name": "y",
                              "nodeType": "YulIdentifier",
                              "src": "5172:1:22"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "5179:3:22",
                                  "type": "",
                                  "value": "256"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "arg",
                                      "nodeType": "YulIdentifier",
                                      "src": "5187:3:22"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "5192:66:22",
                                      "type": "",
                                      "value": "0x8000000000000000000000000000000000000000000000000000000000000000"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "gt",
                                    "nodeType": "YulIdentifier",
                                    "src": "5184:2:22"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "5184:75:22"
                                }
                              ],
                              "functionName": {
                                "name": "mul",
                                "nodeType": "YulIdentifier",
                                "src": "5175:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "5175:85:22"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "5168:3:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5168:93:22"
                        },
                        "variableNames": [
                          {
                            "name": "y",
                            "nodeType": "YulIdentifier",
                            "src": "5163:1:22"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3813:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3818:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3827:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3835:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3843:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3850:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3863:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3871:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3878:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3891:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3899:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3906:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3919:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3927:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3934:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3948:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3956:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3963:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3979:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3987:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3994:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4014:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4022:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4029:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4057:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4065:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4072:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4116:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4125:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5097:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2159,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5118:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2159,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5163:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2159,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5172:1:22",
                      "valueSize": 1
                    }
                  ],
                  "id": 2161,
                  "nodeType": "InlineAssembly",
                  "src": "3786:1479:22"
                }
              ]
            },
            "documentation": {
              "id": 2154,
              "nodeType": "StructuredDocumentation",
              "src": "3577:150:22",
              "text": " @dev Returns the base 2 log of x\n @notice Source : https://ethereum.stackexchange.com/questions/8086/logarithm-math-operation-in-solidity"
            },
            "id": 2163,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "log",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2157,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2156,
                  "mutability": "mutable",
                  "name": "x",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2163,
                  "src": "3742:6:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2155,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3742:4:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3741:8:22"
            },
            "returnParameters": {
              "id": 2160,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2159,
                  "mutability": "mutable",
                  "name": "y",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2163,
                  "src": "3773:6:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2158,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3773:4:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3772:8:22"
            },
            "scope": 2164,
            "src": "3729:1539:22",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 2165,
        "src": "1375:3895:22"
      }
    ],
    "src": "1242:4029:22"
  },
  "legacyAST": {
    "absolutePath": "/Users/gabriel/Documents/iexec/poco-boost/iexec-solidity/contracts/Libs/SafeMathExtended.sol",
    "exportedSymbols": {
      "SafeMathExtended": [
        2164
      ]
    },
    "id": 2165,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1948,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "1242:23:22"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": {
          "id": 1949,
          "nodeType": "StructuredDocumentation",
          "src": "1267:107:22",
          "text": " @title SafeMathExtended\n @dev Unsigned math operations with safety checks that revert on error"
        },
        "fullyImplemented": true,
        "id": 2164,
        "linearizedBaseContracts": [
          2164
        ],
        "name": "SafeMathExtended",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 1973,
              "nodeType": "Block",
              "src": "1537:56:22",
              "statements": [
                {
                  "assignments": [
                    1960
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1960,
                      "mutability": "mutable",
                      "name": "c",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1973,
                      "src": "1541:9:22",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1959,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1541:7:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1964,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1963,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1961,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1952,
                      "src": "1553:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1962,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1954,
                      "src": "1557:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1553:5:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1541:17:22"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1968,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1966,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1960,
                          "src": "1570:1:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1967,
                          "name": "a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1952,
                          "src": "1575:1:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1570:6:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1965,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1562:7:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1969,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1562:15:22",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1970,
                  "nodeType": "ExpressionStatement",
                  "src": "1562:15:22"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1971,
                    "name": "c",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1960,
                    "src": "1588:1:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1958,
                  "id": 1972,
                  "nodeType": "Return",
                  "src": "1581:8:22"
                }
              ]
            },
            "documentation": {
              "id": 1950,
              "nodeType": "StructuredDocumentation",
              "src": "1403:64:22",
              "text": " @dev Adds two unsigned integers, reverts on overflow."
            },
            "id": 1974,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "add",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1955,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1952,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1974,
                  "src": "1482:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1951,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1482:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1954,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1974,
                  "src": "1493:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1953,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1493:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1481:22:22"
            },
            "returnParameters": {
              "id": 1958,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1957,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1974,
                  "src": "1527:7:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1956,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1527:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1526:9:22"
            },
            "scope": 2164,
            "src": "1469:124:22",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1998,
              "nodeType": "Block",
              "src": "1780:56:22",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1987,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1985,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1979,
                          "src": "1792:1:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1986,
                          "name": "a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1977,
                          "src": "1797:1:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1792:6:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1984,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1784:7:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1988,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1784:15:22",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1989,
                  "nodeType": "ExpressionStatement",
                  "src": "1784:15:22"
                },
                {
                  "assignments": [
                    1991
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1991,
                      "mutability": "mutable",
                      "name": "c",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1998,
                      "src": "1803:9:22",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1990,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1803:7:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1995,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1994,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1992,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1977,
                      "src": "1815:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1993,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1979,
                      "src": "1819:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1815:5:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1803:17:22"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1996,
                    "name": "c",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1991,
                    "src": "1831:1:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1983,
                  "id": 1997,
                  "nodeType": "Return",
                  "src": "1824:8:22"
                }
              ]
            },
            "documentation": {
              "id": 1975,
              "nodeType": "StructuredDocumentation",
              "src": "1596:114:22",
              "text": " @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend)."
            },
            "id": 1999,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sub",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1980,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1977,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1999,
                  "src": "1725:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1976,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1725:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1979,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1999,
                  "src": "1736:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1978,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1736:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1724:22:22"
            },
            "returnParameters": {
              "id": 1983,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1982,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1999,
                  "src": "1770:7:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1981,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1770:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1769:9:22"
            },
            "scope": 2164,
            "src": "1712:124:22",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2032,
              "nodeType": "Block",
              "src": "1979:294:22",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2011,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2009,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2002,
                      "src": "2186:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2010,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2191:1:22",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "2186:6:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2015,
                  "nodeType": "IfStatement",
                  "src": "2182:32:22",
                  "trueBody": {
                    "id": 2014,
                    "nodeType": "Block",
                    "src": "2196:18:22",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2012,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2208:1:22",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 2008,
                        "id": 2013,
                        "nodeType": "Return",
                        "src": "2201:8:22"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2017
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2017,
                      "mutability": "mutable",
                      "name": "c",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2032,
                      "src": "2217:9:22",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2016,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2217:7:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2021,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2020,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2018,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2002,
                      "src": "2229:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2019,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2004,
                      "src": "2233:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2229:5:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2217:17:22"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2027,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2025,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2023,
                            "name": "c",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2017,
                            "src": "2246:1:22",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2024,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2002,
                            "src": "2250:1:22",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2246:5:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2026,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2004,
                          "src": "2255:1:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2246:10:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2022,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2238:7:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2028,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2238:19:22",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2029,
                  "nodeType": "ExpressionStatement",
                  "src": "2238:19:22"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2030,
                    "name": "c",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2017,
                    "src": "2268:1:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2008,
                  "id": 2031,
                  "nodeType": "Return",
                  "src": "2261:8:22"
                }
              ]
            },
            "documentation": {
              "id": 2000,
              "nodeType": "StructuredDocumentation",
              "src": "1839:70:22",
              "text": " @dev Multiplies two unsigned integers, reverts on overflow."
            },
            "id": 2033,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mul",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2005,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2002,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2033,
                  "src": "1924:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2001,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1924:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2004,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2033,
                  "src": "1935:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2003,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1935:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1923:22:22"
            },
            "returnParameters": {
              "id": 2008,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2007,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2033,
                  "src": "1969:7:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2006,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1969:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1968:9:22"
            },
            "scope": 2164,
            "src": "1911:362:22",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2057,
              "nodeType": "Block",
              "src": "2457:200:22",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2046,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2044,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2038,
                          "src": "2531:1:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2045,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2535:1:22",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "2531:5:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2043,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2523:7:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2047,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2523:14:22",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2048,
                  "nodeType": "ExpressionStatement",
                  "src": "2523:14:22"
                },
                {
                  "assignments": [
                    2050
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2050,
                      "mutability": "mutable",
                      "name": "c",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2057,
                      "src": "2542:9:22",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2049,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2542:7:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2054,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2053,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2051,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2036,
                      "src": "2554:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2052,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2038,
                      "src": "2558:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2554:5:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2542:17:22"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2055,
                    "name": "c",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2050,
                    "src": "2652:1:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2042,
                  "id": 2056,
                  "nodeType": "Return",
                  "src": "2645:8:22"
                }
              ]
            },
            "documentation": {
              "id": 2034,
              "nodeType": "StructuredDocumentation",
              "src": "2276:111:22",
              "text": " @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero."
            },
            "id": 2058,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "div",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2039,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2036,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2058,
                  "src": "2402:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2035,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2402:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2038,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2058,
                  "src": "2413:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2037,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2413:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2401:22:22"
            },
            "returnParameters": {
              "id": 2042,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2041,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2058,
                  "src": "2447:7:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2040,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2447:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2446:9:22"
            },
            "scope": 2164,
            "src": "2389:268:22",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2078,
              "nodeType": "Block",
              "src": "2862:39:22",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2071,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2069,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2063,
                          "src": "2874:1:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2070,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2879:1:22",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "2874:6:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2068,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2866:7:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2072,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2866:15:22",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2073,
                  "nodeType": "ExpressionStatement",
                  "src": "2866:15:22"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2076,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2074,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2061,
                      "src": "2892:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "%",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2075,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2063,
                      "src": "2896:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2892:5:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2067,
                  "id": 2077,
                  "nodeType": "Return",
                  "src": "2885:12:22"
                }
              ]
            },
            "documentation": {
              "id": 2059,
              "nodeType": "StructuredDocumentation",
              "src": "2660:132:22",
              "text": " @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),\n reverts when dividing by zero."
            },
            "id": 2079,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mod",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2064,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2061,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2079,
                  "src": "2807:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2060,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2807:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2063,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2079,
                  "src": "2818:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2062,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2818:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2806:22:22"
            },
            "returnParameters": {
              "id": 2067,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2066,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2079,
                  "src": "2852:7:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2065,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2852:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2851:9:22"
            },
            "scope": 2164,
            "src": "2794:107:22",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2096,
              "nodeType": "Block",
              "src": "3025:29:22",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2091,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2089,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2082,
                        "src": "3036:1:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2090,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2084,
                        "src": "3041:1:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "3036:6:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 2093,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2084,
                      "src": "3049:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2094,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "3036:14:22",
                    "trueExpression": {
                      "argumentTypes": null,
                      "id": 2092,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2082,
                      "src": "3045:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2088,
                  "id": 2095,
                  "nodeType": "Return",
                  "src": "3029:21:22"
                }
              ]
            },
            "documentation": {
              "id": 2080,
              "nodeType": "StructuredDocumentation",
              "src": "2904:51:22",
              "text": " @dev Returns the largest of two numbers."
            },
            "id": 2097,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "max",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2085,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2082,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2097,
                  "src": "2970:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2081,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2970:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2084,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2097,
                  "src": "2981:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2083,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2981:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2969:22:22"
            },
            "returnParameters": {
              "id": 2088,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2087,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2097,
                  "src": "3015:7:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2086,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3015:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3014:9:22"
            },
            "scope": 2164,
            "src": "2957:97:22",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2114,
              "nodeType": "Block",
              "src": "3179:28:22",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2109,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2107,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2100,
                        "src": "3190:1:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2108,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2102,
                        "src": "3194:1:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "3190:5:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 2111,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2102,
                      "src": "3202:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2112,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "3190:13:22",
                    "trueExpression": {
                      "argumentTypes": null,
                      "id": 2110,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2100,
                      "src": "3198:1:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2106,
                  "id": 2113,
                  "nodeType": "Return",
                  "src": "3183:20:22"
                }
              ]
            },
            "documentation": {
              "id": 2098,
              "nodeType": "StructuredDocumentation",
              "src": "3057:52:22",
              "text": " @dev Returns the smallest of two numbers."
            },
            "id": 2115,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "min",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2103,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2100,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2115,
                  "src": "3124:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2099,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3124:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2102,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2115,
                  "src": "3135:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2101,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3135:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3123:22:22"
            },
            "returnParameters": {
              "id": 2106,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2105,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2115,
                  "src": "3169:7:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2104,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3169:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3168:9:22"
            },
            "scope": 2164,
            "src": "3111:96:22",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2135,
              "nodeType": "Block",
              "src": "3353:32:22",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2129,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2118,
                            "src": "3372:1:22",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 2130,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2120,
                            "src": "3375:1:22",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 2128,
                          "name": "mul",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2033,
                          "src": "3368:3:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 2131,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3368:9:22",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2132,
                        "name": "c",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2122,
                        "src": "3379:1:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2127,
                      "name": "div",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2058,
                      "src": "3364:3:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2133,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3364:17:22",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2126,
                  "id": 2134,
                  "nodeType": "Return",
                  "src": "3357:24:22"
                }
              ]
            },
            "documentation": {
              "id": 2116,
              "nodeType": "StructuredDocumentation",
              "src": "3210:52:22",
              "text": " @dev Multiplies the a by the fraction b/c"
            },
            "id": 2136,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mulByFraction",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2123,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2118,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2136,
                  "src": "3287:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2117,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3287:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2120,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2136,
                  "src": "3298:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2119,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3298:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2122,
                  "mutability": "mutable",
                  "name": "c",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2136,
                  "src": "3309:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2121,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3309:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3286:33:22"
            },
            "returnParameters": {
              "id": 2126,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2125,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2136,
                  "src": "3343:7:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2124,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3343:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3342:9:22"
            },
            "scope": 2164,
            "src": "3264:121:22",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2152,
              "nodeType": "Block",
              "src": "3535:39:22",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2147,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2139,
                        "src": "3560:1:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2148,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2141,
                        "src": "3563:1:22",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "313030",
                        "id": 2149,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3566:3:22",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_100_by_1",
                          "typeString": "int_const 100"
                        },
                        "value": "100"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_100_by_1",
                          "typeString": "int_const 100"
                        }
                      ],
                      "id": 2146,
                      "name": "mulByFraction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2136,
                      "src": "3546:13:22",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2150,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3546:24:22",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2145,
                  "id": 2151,
                  "nodeType": "Return",
                  "src": "3539:31:22"
                }
              ]
            },
            "documentation": {
              "id": 2137,
              "nodeType": "StructuredDocumentation",
              "src": "3388:70:22",
              "text": " @dev Return b percents of a (equivalent to a percents of b)"
            },
            "id": 2153,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "percentage",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2142,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2139,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2153,
                  "src": "3480:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2138,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3480:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2141,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2153,
                  "src": "3491:9:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2140,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3491:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3479:22:22"
            },
            "returnParameters": {
              "id": 2145,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2144,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2153,
                  "src": "3525:7:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2143,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3525:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3524:9:22"
            },
            "scope": 2164,
            "src": "3460:114:22",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2162,
              "nodeType": "Block",
              "src": "3782:1486:22",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "3797:1468:22",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "3802:12:22",
                        "value": {
                          "name": "x",
                          "nodeType": "YulIdentifier",
                          "src": "3813:1:22"
                        },
                        "variables": [
                          {
                            "name": "arg",
                            "nodeType": "YulTypedName",
                            "src": "3806:3:22",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "3818:13:22",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "3827:1:22"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3829:1:22",
                              "type": "",
                              "value": "1"
                            }
                          ],
                          "functionName": {
                            "name": "sub",
                            "nodeType": "YulIdentifier",
                            "src": "3823:3:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3823:8:22"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "3818:1:22"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "3835:24:22",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "3843:1:22"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "3850:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3853:4:22",
                                  "type": "",
                                  "value": "0x02"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "3846:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3846:12:22"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "3840:2:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3840:19:22"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "3835:1:22"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "3863:24:22",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "3871:1:22"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "3878:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3881:4:22",
                                  "type": "",
                                  "value": "0x04"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "3874:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3874:12:22"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "3868:2:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3868:19:22"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "3863:1:22"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "3891:24:22",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "3899:1:22"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "3906:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3909:4:22",
                                  "type": "",
                                  "value": "0x10"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "3902:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3902:12:22"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "3896:2:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3896:19:22"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "3891:1:22"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "3919:25:22",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "3927:1:22"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "3934:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3937:5:22",
                                  "type": "",
                                  "value": "0x100"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "3930:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3930:13:22"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "3924:2:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3924:20:22"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "3919:1:22"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "3948:27:22",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "3956:1:22"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "3963:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3966:7:22",
                                  "type": "",
                                  "value": "0x10000"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "3959:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3959:15:22"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "3953:2:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3953:22:22"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "3948:1:22"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "3979:31:22",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "3987:1:22"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "3994:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3997:11:22",
                                  "type": "",
                                  "value": "0x100000000"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "3990:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3990:19:22"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "3984:2:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3984:26:22"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "3979:1:22"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "4014:39:22",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "4022:1:22"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "4029:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4032:19:22",
                                  "type": "",
                                  "value": "0x10000000000000000"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "4025:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4025:27:22"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "4019:2:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4019:34:22"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "4014:1:22"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "4057:55:22",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "4065:1:22"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "4072:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4075:35:22",
                                  "type": "",
                                  "value": "0x100000000000000000000000000000000"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "4068:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4068:43:22"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "4062:2:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4062:50:22"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "4057:1:22"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "4116:14:22",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "4125:1:22"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4128:1:22",
                              "type": "",
                              "value": "1"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "4121:3:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4121:9:22"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "4116:1:22"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "4134:20:22",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4149:4:22",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "4143:5:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4143:11:22"
                        },
                        "variables": [
                          {
                            "name": "m",
                            "nodeType": "YulTypedName",
                            "src": "4138:1:22",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "m",
                              "nodeType": "YulIdentifier",
                              "src": "4165:1:22"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4178:66:22",
                              "type": "",
                              "value": "0xf8f9cbfae6cc78fbefe7cdc3a1793dfcf4f0e8bbd8cec470b6a28a7a5a3e1efd"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4158:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4158:87:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4158:87:22"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "4260:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4262:4:22",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "4256:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4256:11:22"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4269:66:22",
                              "type": "",
                              "value": "0xf5ecf1b3e9debc68e1d9cfabc5997135bfb7a7a3938b7b606b5b4b3f2f1f0ffe"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4249:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4249:87:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4249:87:22"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "4351:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4353:4:22",
                                  "type": "",
                                  "value": "0x40"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "4347:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4347:11:22"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4360:66:22",
                              "type": "",
                              "value": "0xf6e4ed9ff2d6b458eadcdf97bd91692de2d4da8fd2d0ac50c6ae9a8272523616"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4340:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4340:87:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4340:87:22"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "4442:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4444:4:22",
                                  "type": "",
                                  "value": "0x60"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "4438:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4438:11:22"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4451:66:22",
                              "type": "",
                              "value": "0xc8c0b887b0a8a4489c948c7f847c6125746c645c544c444038302820181008ff"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4431:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4431:87:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4431:87:22"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "4533:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4535:4:22",
                                  "type": "",
                                  "value": "0x80"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "4529:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4529:11:22"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4542:66:22",
                              "type": "",
                              "value": "0xf7cae577eec2a03cf3bad76fb589591debb2dd67e0aa9834bea6925f6a4a2e0e"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4522:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4522:87:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4522:87:22"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "4624:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4626:4:22",
                                  "type": "",
                                  "value": "0xa0"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "4620:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4620:11:22"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4633:66:22",
                              "type": "",
                              "value": "0xe39ed557db96902cd38ed14fad815115c786af479b7e83247363534337271707"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4613:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4613:87:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4613:87:22"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "4715:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4717:4:22",
                                  "type": "",
                                  "value": "0xc0"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "4711:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4711:11:22"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4724:66:22",
                              "type": "",
                              "value": "0xc976c13bb96e881cb166a933a55e490d9d56952b8d4e801485467d2362422606"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4704:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4704:87:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4704:87:22"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "4806:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4808:4:22",
                                  "type": "",
                                  "value": "0xe0"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "4802:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4802:11:22"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4815:66:22",
                              "type": "",
                              "value": "0x753a6d1b65325d0c552a4d1345224105391a310b29122104190a110309020100"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4795:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4795:87:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4795:87:22"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4893:4:22",
                              "type": "",
                              "value": "0x40"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "4903:1:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4906:5:22",
                                  "type": "",
                                  "value": "0x100"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "4899:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4899:13:22"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4886:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4886:27:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4886:27:22"
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "4917:77:22",
                        "value": {
                          "kind": "number",
                          "nodeType": "YulLiteral",
                          "src": "4930:64:22",
                          "type": "",
                          "value": "0x818283848586878898a8b8c8d8e8f929395969799a9b9d9e9faaeb6bedeeff"
                        },
                        "variables": [
                          {
                            "name": "magic",
                            "nodeType": "YulTypedName",
                            "src": "4921:5:22",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "4998:78:22",
                        "value": {
                          "kind": "number",
                          "nodeType": "YulLiteral",
                          "src": "5011:65:22",
                          "type": "",
                          "value": "0x100000000000000000000000000000000000000000000000000000000000000"
                        },
                        "variables": [
                          {
                            "name": "shift",
                            "nodeType": "YulTypedName",
                            "src": "5002:5:22",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "5080:34:22",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "5097:1:22"
                                },
                                {
                                  "name": "magic",
                                  "nodeType": "YulIdentifier",
                                  "src": "5100:5:22"
                                }
                              ],
                              "functionName": {
                                "name": "mul",
                                "nodeType": "YulIdentifier",
                                "src": "5093:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "5093:13:22"
                            },
                            {
                              "name": "shift",
                              "nodeType": "YulIdentifier",
                              "src": "5108:5:22"
                            }
                          ],
                          "functionName": {
                            "name": "div",
                            "nodeType": "YulIdentifier",
                            "src": "5089:3:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5089:25:22"
                        },
                        "variables": [
                          {
                            "name": "a",
                            "nodeType": "YulTypedName",
                            "src": "5084:1:22",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "5118:41:22",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "m",
                                      "nodeType": "YulIdentifier",
                                      "src": "5137:1:22"
                                    },
                                    {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5143:3:22",
                                          "type": "",
                                          "value": "255"
                                        },
                                        {
                                          "name": "a",
                                          "nodeType": "YulIdentifier",
                                          "src": "5147:1:22"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "sub",
                                        "nodeType": "YulIdentifier",
                                        "src": "5139:3:22"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5139:10:22"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "5133:3:22"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "5133:17:22"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "5127:5:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "5127:24:22"
                            },
                            {
                              "name": "shift",
                              "nodeType": "YulIdentifier",
                              "src": "5153:5:22"
                            }
                          ],
                          "functionName": {
                            "name": "div",
                            "nodeType": "YulIdentifier",
                            "src": "5123:3:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5123:36:22"
                        },
                        "variableNames": [
                          {
                            "name": "y",
                            "nodeType": "YulIdentifier",
                            "src": "5118:1:22"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "5163:98:22",
                        "value": {
                          "arguments": [
                            {
                              "name": "y",
                              "nodeType": "YulIdentifier",
                              "src": "5172:1:22"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "5179:3:22",
                                  "type": "",
                                  "value": "256"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "arg",
                                      "nodeType": "YulIdentifier",
                                      "src": "5187:3:22"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "5192:66:22",
                                      "type": "",
                                      "value": "0x8000000000000000000000000000000000000000000000000000000000000000"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "gt",
                                    "nodeType": "YulIdentifier",
                                    "src": "5184:2:22"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "5184:75:22"
                                }
                              ],
                              "functionName": {
                                "name": "mul",
                                "nodeType": "YulIdentifier",
                                "src": "5175:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "5175:85:22"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "5168:3:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5168:93:22"
                        },
                        "variableNames": [
                          {
                            "name": "y",
                            "nodeType": "YulIdentifier",
                            "src": "5163:1:22"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3813:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3818:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3827:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3835:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3843:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3850:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3863:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3871:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3878:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3891:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3899:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3906:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3919:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3927:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3934:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3948:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3956:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3963:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3979:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3987:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3994:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4014:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4022:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4029:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4057:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4065:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4072:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4116:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4125:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2156,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5097:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2159,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5118:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2159,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5163:1:22",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2159,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5172:1:22",
                      "valueSize": 1
                    }
                  ],
                  "id": 2161,
                  "nodeType": "InlineAssembly",
                  "src": "3786:1479:22"
                }
              ]
            },
            "documentation": {
              "id": 2154,
              "nodeType": "StructuredDocumentation",
              "src": "3577:150:22",
              "text": " @dev Returns the base 2 log of x\n @notice Source : https://ethereum.stackexchange.com/questions/8086/logarithm-math-operation-in-solidity"
            },
            "id": 2163,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "log",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2157,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2156,
                  "mutability": "mutable",
                  "name": "x",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2163,
                  "src": "3742:6:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2155,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3742:4:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3741:8:22"
            },
            "returnParameters": {
              "id": 2160,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2159,
                  "mutability": "mutable",
                  "name": "y",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2163,
                  "src": "3773:6:22",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2158,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3773:4:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3772:8:22"
            },
            "scope": 2164,
            "src": "3729:1539:22",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 2165,
        "src": "1375:3895:22"
      }
    ],
    "src": "1242:4029:22"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.12+commit.27d51765.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.5",
  "updatedAt": "2023-05-04T08:29:47.207Z",
  "devdoc": {
    "details": "Unsigned math operations with safety checks that revert on error",
    "kind": "dev",
    "methods": {},
    "title": "SafeMathExtended",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}